import { getToken } from './auth.js'

// 不需要token的请求路径
const whiteList = [
  '/api/login',
  '/api/register',
  '/api/notice/list',
  '/api/notice/detail',
  '/api/index/info'
]

// 创建请求实例
const request = (options) => {
  return new Promise((resolve, reject) => {
    // 获取token
    const tokenInfo = getToken()
    console.log('获取到的token信息:', tokenInfo)
    
    // 合并请求头
    const header = {
      'Content-Type': 'application/json',
      ...options.header
    }
    
    // 检查是否是白名单请求
    const isWhiteList = whiteList.some(path => options.url.includes(path))
    console.log('当前请求路径:', options.url, '是否在白名单中:', isWhiteList)
    
    // 如果不是白名单请求，则检查token
    if (!isWhiteList) {
      if (tokenInfo.token) {
        // 设置token到请求头
        header['token'] = tokenInfo.token.replace('Bearer ', '')
        console.log('添加token到请求头:', header)
        
        // 检查token是否过期
        if (tokenInfo.expire) {
          console.log('token剩余有效时间:', tokenInfo.expire, '毫秒')
          if (tokenInfo.expire <= 0) {
            console.error('token已过期，需要重新登录')
            uni.showToast({
              title: '登录已过期，请重新登录',
              icon: 'none',
              duration: 2000
            })
            uni.navigateTo({
              url: '/pages/login/index'
            })
            reject(new Error('token已过期'))
            return
          }
        }
      } else {
        console.log('请求未携带token，当前token:', tokenInfo)
        // 非白名单请求需要token
        uni.showToast({
          title: '请先登录',
          icon: 'none',
          duration: 2000
        })
        uni.navigateTo({
          url: '/pages/login/index'
        })
        reject(new Error('未登录'))
        return
      }
    }
    
    // 获取baseUrl
    const baseUrl = options.baseUrl || 'http://localhost:8081/renren-api'
    const url = baseUrl + options.url
    
    // 打印请求信息
    console.log('请求URL:', url)
    console.log('请求方法:', options.method)
    console.log('请求头:', header)
    console.log('请求数据:', options.data)
    
    // 发起请求
    uni.request({
      ...options,
      url,
      header,
      success: (response) => {
        const res = response.data
        console.log('请求响应:', res)
        
        // 请求成功
        if (res.code === 0) {
          resolve(res)
        } else if (res.code === 401) {
          // token过期或无效，跳转到登录页
          console.error('token无效或过期')
          uni.showToast({
            title: '请重新登录',
            icon: 'none',
            duration: 2000
          })
          uni.navigateTo({
            url: '/pages/login/index'
          })
          reject(res)
        } else {
          // 统一处理错误
          console.error('请求失败:', res.msg)
          uni.showToast({
            title: res.msg || '请求失败',
            icon: 'none',
            duration: 2000
          })
          reject(res)
        }
      },
      fail: (error) => {
        console.error('网络请求失败:', error)
        uni.showToast({
          title: '网络请求失败',
          icon: 'none',
          duration: 2000
        })
        reject(error)
      }
    })
  })
}

// 封装GET请求
export function get(url, data = {}, baseUrl) {
  return request({
    url,
    method: 'GET',
    data,
    baseUrl
  })
}

// 封装POST请求
export function post(url, data = {}, baseUrl) {
  return request({
    url,
    method: 'POST',
    data,
    baseUrl
  })
}

// 导出http对象
export const http = {
  get,
  post,
  baseURL: 'http://localhost:8081/renren-api'
}

export default request